{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 真实场景中的 final_metrics 示例：\n",
    "final_metrics = {\n",
    "  'eval_loss': 0.2345,\n",
    "  'eval_macro_f1': 0.7341,\n",
    "  'eval_micro_f1': 0.7489,\n",
    "  'eval_B-中医治则_f1': 0.4521,\n",
    "  'eval_I-中医治则_f1': 0.3876,\n",
    "  'eval_B-中医治疗_f1': 0.7123,\n",
    "  'eval_I-中医治疗_f1': 0.6987,\n",
    "  'eval_B-中医证候_f1': 0.6234,\n",
    "  'eval_I-中医证候_f1': 0.5876,\n",
    "  'eval_B-中医诊断_f1': 0.6890,\n",
    "  'eval_I-中医诊断_f1': 0.6543,\n",
    "  'eval_B-中药_f1': 0.8210,\n",
    "  'eval_I-中药_f1': 0.7987,\n",
    "  'eval_B-临床表现_f1': 0.7654,\n",
    "  'eval_I-临床表现_f1': 0.7432,\n",
    "  'eval_B-其他治疗_f1': 0.5987,\n",
    "  'eval_I-其他治疗_f1': 0.5567,\n",
    "  'eval_B-方剂_f1': 0.7890,\n",
    "  'eval_I-方剂_f1': 0.7654,\n",
    "  'eval_B-西医治疗_f1': 0.6789,\n",
    "  'eval_I-西医治疗_f1': 0.6456,\n",
    "  'eval_B-西医诊断_f1': 0.7210,\n",
    "  'eval_I-西医诊断_f1': 0.6987,\n",
    "  'eval_O_f1': 0.9345,\n",
    "  'eval_runtime': 15.67,\n",
    "  'eval_samples_per_second': 32.45,\n",
    "  'eval_steps_per_second': 4.123,\n",
    "  'epoch': 10.0\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def extract_f1_scores_from_metrics(final_metrics):\n",
    "  \"\"\"从final_metrics中提取F1分数\"\"\"\n",
    "  f1_scores = {}\n",
    "  \n",
    "  for key, value in final_metrics.items():\n",
    "    # 提取(具体实体类别), 以 'eval_' 开头且 不是总体指标的\n",
    "    if key.startswith('eval_') and key not in [\n",
    "      'eval_loss', 'eval_macro_f1', 'eval_micro_f1', 'eval_runtime',\n",
    "      'eval_samples_per_second', 'eval_steps_per_second', 'epoch'\n",
    "    ]:\n",
    "        # 去掉 'eval_' 前缀\n",
    "      entity_name = key[5:]  # 去掉前5个字符 'eval_'\n",
    "      f1_scores[entity_name] = value\n",
    "  print(f\"f1_scores: {f1_scores}\")\n",
    "  return f1_scores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "f1_scores: {'B-中医治则_f1': 0.4521, 'I-中医治则_f1': 0.3876, 'B-中医治疗_f1': 0.7123, 'I-中医治疗_f1': 0.6987, 'B-中医证候_f1': 0.6234, 'I-中医证候_f1': 0.5876, 'B-中医诊断_f1': 0.689, 'I-中医诊断_f1': 0.6543, 'B-中药_f1': 0.821, 'I-中药_f1': 0.7987, 'B-临床表现_f1': 0.7654, 'I-临床表现_f1': 0.7432, 'B-其他治疗_f1': 0.5987, 'I-其他治疗_f1': 0.5567, 'B-方剂_f1': 0.789, 'I-方剂_f1': 0.7654, 'B-西医治疗_f1': 0.6789, 'I-西医治疗_f1': 0.6456, 'B-西医诊断_f1': 0.721, 'I-西医诊断_f1': 0.6987, 'O_f1': 0.9345}\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'B-中医治则_f1': 0.4521,\n",
       " 'I-中医治则_f1': 0.3876,\n",
       " 'B-中医治疗_f1': 0.7123,\n",
       " 'I-中医治疗_f1': 0.6987,\n",
       " 'B-中医证候_f1': 0.6234,\n",
       " 'I-中医证候_f1': 0.5876,\n",
       " 'B-中医诊断_f1': 0.689,\n",
       " 'I-中医诊断_f1': 0.6543,\n",
       " 'B-中药_f1': 0.821,\n",
       " 'I-中药_f1': 0.7987,\n",
       " 'B-临床表现_f1': 0.7654,\n",
       " 'I-临床表现_f1': 0.7432,\n",
       " 'B-其他治疗_f1': 0.5987,\n",
       " 'I-其他治疗_f1': 0.5567,\n",
       " 'B-方剂_f1': 0.789,\n",
       " 'I-方剂_f1': 0.7654,\n",
       " 'B-西医治疗_f1': 0.6789,\n",
       " 'I-西医治疗_f1': 0.6456,\n",
       " 'B-西医诊断_f1': 0.721,\n",
       " 'I-西医诊断_f1': 0.6987,\n",
       " 'O_f1': 0.9345}"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "extract_f1_scores_from_metrics(final_metrics)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "tuning_env",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.18"
  },
  "orig_nbformat": 4,
  "vscode": {
   "interpreter": {
    "hash": "5b5cfca19401015264b4741f08a5ab630bb44e69b46d09de08cfb7d2d4656fc3"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
